package com.baofu.paycore.biz.engine.command.impl;

import com.baofu.paycore.biz.engine.command.Command;
import com.baofu.paycore.biz.enums.CommandProcessorEnum;
import com.baofu.paycore.biz.enums.CommandTypeEnum;
import com.baofu.paycore.service.facade.enums.PayToolTypeEnum;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.Date;

/**
 * 银行卡转账指令
 *
 * User: xin deng  Date: 16/6/3 ProjectName: paycore Version: 1.0
 */
@Setter
@Getter
@ToString
public class BankTransferCommand implements Command {

    /**
     * 支付单号
     */
    private String payNo;

    /**
     * 请求订单号
     */
    private String requestOrderNo;

    /**
     * 业务请求时间
     */
    private Date bizDate;

    /**
     * 金额
     */
    private Long amt;

    /**
     * 货币类型
     */
    private String ccy;

    /**
     * 请求渠道
     */
    private String requestChannel;

    /**
     * 终端设备
     */
    private String requestSystem;

    /**
     * 客户账号
     */
    private String contractNo;

    /**
     * 收款方账户号
     */
    private String payeeAccNo;

    /**
     * 收款方账户类型
     */
    private String payeeAccType;

    /**
     * 业务产品大类
     */
    private String bizType;

    /**
     * 业务产品细类
     */
    private String subBizType;

    /**
     * 支付工具
     */
    private String payTool;

    /**
     * 支付工具细类
     */
    private String subPayTool;

    /**
     * 银行代码
     */
    private String bankCode;

    /**
     * 协议组成编号
     */
    private String agreeRelId;

    /**
     * 绑卡协议号
     */
    private String agreementNo;

    /**
     * 追踪日志ID
     */
    private String traceLogId;

    /**
     * 资金明细No
     */
    private String fundDetailNo;

    /**
     * 操作人
     */
    private String operator;

    /**
     * 获取支付命令类型。
     *
     * @return 返回该命令的类型枚举。
     */
    @Override
    public CommandTypeEnum getCommandType() {
        return CommandTypeEnum.RECHARGE_TRANSFER;
    }

    /**
     * 获取命令所针对的支付工具。
     *
     * @return 返回命令所针对的支付工具。
     */
    @Override
    public PayToolTypeEnum getPayToolType() {
        return PayToolTypeEnum.BANK_CARD;
    }

    /**
     * 获取该命令对应的处理器。
     *
     * @return 返回该命令的对应的处理器的枚举。
     */
    @Override
    public CommandProcessorEnum getProcessorType() {
        return CommandProcessorEnum.BANK_TRANSFER_PROCESSOR;
    }

    /**
     * 获取优先级
     *
     * @return 级别
     */
    @Override
    public int getOrder() {
        return 1;
    }

    /**
     * 获取指令ID
     *
     * @return 指令编号
     */
    @Override
    public String getCommandNo() {
        return fundDetailNo;
    }

    @Override
    public int compareTo(Command o) {
        return this.getOrder() - o.getOrder();
    }
}
